{
GTask *task = data;
GError *error = NULL;
- const GValue *value;
+ GValue *value;
+
+ value = g_task_get_task_data (task);
- value = gdk_content_deserialize_finish (result, &error);
- if (value == NULL)
+ if (!gdk_content_deserialize_finish (result, value, &error))
g_task_return_error (task, error);
else
- g_task_return_pointer (task, (gpointer) value, NULL);
+ g_task_return_pointer (task, value, NULL);
g_object_unref (task);
}
gdk_content_deserialize_async (stream,
mime_type,
- GPOINTER_TO_SIZE (g_task_get_task_data (task)),
+ G_VALUE_TYPE (g_task_get_task_data (task)),
g_task_get_priority (task),
g_task_get_cancellable (task),
gdk_clipboard_read_value_done,
g_object_unref (stream);
}
+static void
+free_value (gpointer value)
+{
+ g_value_unset (value);
+ g_slice_free (GValue, value);
+}
+
static void
gdk_clipboard_read_value_internal (GdkClipboard *clipboard,
GType type,
{
GdkContentFormatsBuilder *builder;
GdkContentFormats *formats;
+ GValue *value;
GTask *task;
builder = gdk_content_formats_builder_new ();
task = g_task_new (clipboard, cancellable, callback, user_data);
g_task_set_priority (task, io_priority);
g_task_set_source_tag (task, source_tag);
- g_task_set_task_data (task, GSIZE_TO_POINTER (type), NULL);
+ value = g_slice_new0 (GValue);
+ g_value_init (value, type);
+ g_task_set_task_data (task, value, free_value);
gdk_clipboard_read_internal (clipboard,
formats,
user_data);
}
-const GValue *
+gboolean
gdk_content_deserialize_finish (GAsyncResult *result,
+ GValue *value,
GError **error)
{
GdkContentDeserializer *deserializer;
- g_return_val_if_fail (GDK_IS_CONTENT_DESERIALIZER (result), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
+ g_return_val_if_fail (GDK_IS_CONTENT_DESERIALIZER (result), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
deserializer = GDK_CONTENT_DESERIALIZER (result);
+ g_return_val_if_fail (G_VALUE_HOLDS (value, G_VALUE_TYPE (&deserializer->value)), FALSE);
if (deserializer->error)
{
if (error)
*error = g_error_copy (deserializer->error);
- return NULL;
+ return FALSE;
}
- return &deserializer->value;
+ g_value_copy (&deserializer->value, value);
+ return TRUE;
}
/*** DESERIALIZERS ***/